package com.sisgesbyte.services.rrhh;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import org.apache.log4j.Logger;

import com.sisgesbyte.common.ConstModAdministracion;
import com.sisgesbyte.common.ConstModVentas;
import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.ObjetoXmlUtil;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.common.exception.BaseException;
import com.sisgesbyte.dao.beanDao.ComunObjetoRequest;
import com.sisgesbyte.dao.beanDao.EmpleadoRequest;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.comun.MantenimientoComunObjetoDao;
import com.sisgesbyte.dao.rrhh.MantenimientoEmpleadoDao;
import com.sisgesbyte.data.entity.rrhh.ListaEmpleadoEntity;
import com.sisgesbyte.services.commonBean.GenericResponse;
import com.sisgesbyte.services.rrhh.bean.EmpleadoBean;
import com.sisgesbyte.services.rrhh.bean.FiltroOpcionesEmpleadoFO;
import com.sisgesbyte.services.rrhh.bean.ListaEmpleadoResponse;

@Stateless
public class MantenimientoEmpleadoServiceImpl implements
		MantenimientoEmpleadoService {
	private static final Logger wlLogger = Logger.getLogger(MantenimientoEmpleadoServiceImpl.class); 

	@EJB
	private MantenimientoEmpleadoDao mantenimientoEmpleadoDao;
	@EJB
	private MantenimientoComunObjetoDao mantenimientoComunObjetoDao;
	@Inject
	private Validaciones validaciones;
	@Override
	public ListaEmpleadoResponse listaEmpleados(String codTransaccion,
			FiltroOpcionesEmpleadoFO filtro) {
		String mensajeTransaccionMetodo = "[listaEmpleados idTx=" + codTransaccion + "] - ";
		wlLogger.debug(mensajeTransaccionMetodo + "Datos Entrada : " + ObjetoXmlUtil.anyObjectToXmlText(filtro));
		ListaEmpleadoResponse response = new ListaEmpleadoResponse();
		
		try{
			FiltrosSQLBean cadenaFiltros = new FiltrosSQLBean();
			
			List<ListaEmpleadoEntity> empleado = mantenimientoEmpleadoDao.listaEmpleados(cadenaFiltros);
			
			if(empleado.size() > 0){
				List<EmpleadoBean> listaEmpleados = new ArrayList<EmpleadoBean>();
				for(ListaEmpleadoEntity row : empleado ){
					EmpleadoBean bean = new EmpleadoBean();
					bean.setApellido(validaciones.validarCamposString(row.getApellido()));
					bean.setApellidoMaterno(validaciones.validarCamposString(row.getApellido_materno()));
					bean.setAreaEmpresa(validaciones.validarCamposString(row.getArea_empresa()));
					bean.setCategoriaEmpleado(validaciones.validarCamposString(row.getCategoria_empleado()));
					bean.setCiudad(validaciones.validarCamposString(row.getCiudad()));
					bean.setCodEmpleado(validaciones.validarCamposString(row.getCod_empleado()));
					bean.setDireccion(validaciones.validarCamposString(row.getDireccion()));
					bean.setDistrito(validaciones.validarCamposString(row.getDistrito()));
					bean.setEmail(validaciones.validarCamposString(row.getEmail()));
					bean.setEstado(row.getEstado());
					bean.setFechaNacimiento(row.getFecha_nacimiento());
					bean.setFechaRegistro(row.getFecha_registro());
					bean.setId(row.getId());
					bean.setIdAreaEmpresa(row.getId_area_empresa());
					bean.setIdCategoriaEmpleado(row.getId_categoria_empleado());
					bean.setIdCiudad(row.getId_ciudad());
					bean.setIdComun_objeto(row.getId_comun_objeto());
					bean.setIdDistrito(row.getId_distrito());
					bean.setIdPais(row.getId_pais());
					bean.setIdRegion(row.getId_region());
					bean.setImagen(row.getImagen());
					bean.setNombre(validaciones.validarCamposString(row.getNombre()));
					bean.setNumDoc(validaciones.validarCamposString(row.getNum_doc()));
					bean.setPais(validaciones.validarCamposString(row.getPais()));
					bean.setRegion(validaciones.validarCamposString(row.getRegion()));
					bean.setTelefono1(validaciones.validarCamposString(row.getTelefono1()));
					bean.setTelefono2(validaciones.validarCamposString(row.getTelefono2()));
					bean.setTipoIdentificacion(validaciones.validarCamposString(row.getTipo_identificacion()));
					bean.setTipoIdentificacionId(row.getTipo_identificacion_id());

					listaEmpleados.add(bean);
				}
				
				response.setIdTransaccion(codTransaccion);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
				response.setListaEmpleados(listaEmpleados);
				
			}else{
				response.setIdTransaccion(codTransaccion);
				response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDF);
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso" +e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT);
		}
		
		wlLogger.info(mensajeTransaccionMetodo + "Datos Salida : " + ObjetoXmlUtil.anyObjectToXmlText(response));
		return response;
	}
	@Override
	public GenericResponse nuevoEmpleado(String codTransaccion,
			EmpleadoRequest request) {
		GenericResponse response = new GenericResponse();
		String mensajeTransaccionMetodo = "[nuevoEmpleado idTx=" + codTransaccion + "] - ";
		System.out.println(mensajeTransaccionMetodo + "Datos Entrada : " + ObjetoXmlUtil.anyObjectToXmlText(request));
		int idComunObjeto = 0;
		try{
			ComunObjetoRequest req = new ComunObjetoRequest();
			req.setApellido(validaciones.validarCamposString(request.getApellido()));
			req.setApellidoMaterno(validaciones.validarCamposString(request.getApellido_materno()));
			req.setCiudadId(request.getId_ciudad());
			req.setDireccion(validaciones.validarCamposString(request.getDireccion()));
			req.setDistritoId(request.getId_distrito());
			req.setDivisionPaisId(request.getId_region());
			req.setEmail(validaciones.validarCamposString(request.getEmail()));
			req.setFechaNacimiento(request.getFecha_nacimiento());
			req.setFechaRegistro(request.getFecha_registro());
			req.setNombre(validaciones.validarCamposString(request.getNombre()));
			req.setNumDoc(validaciones.validarCamposString(request.getNum_doc()));
			req.setObservacion(validaciones.validarCamposString(request.getObservacion()));
			req.setPaisId(request.getId_pais());
			req.setTelefono1(validaciones.validarCamposString(request.getTelefono1()));
			req.setTelefono2(validaciones.validarCamposString(request.getTelefono2()));
			req.setTipoIdentificacionId(request.getTipo_identificacion_id());
			req.setTipoObjetoId(Integer.valueOf(ConstModVentas.COD_OBJETO_PERSONAL));
			
			idComunObjeto = mantenimientoComunObjetoDao.guardarObjeto(req);
			
			if(idComunObjeto > 0){
				request.setId_comun_objeto(idComunObjeto);
				
				GenericResponse nuevo = mantenimientoEmpleadoDao.nuevoEmpleado(request);
				
				if(nuevo.getCodigoRespuesta().equalsIgnoreCase(ConstantesInternasSistema.CODIGO_EXITO)){
					System.out.println(mensajeTransaccionMetodo + "Se registro Correctamente");
					response.setIdTransaccion(codTransaccion);
					response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
					response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
					
				}else{
					System.out.println(mensajeTransaccionMetodo + "IDF: No se pudo guardar el registro empleado ");
					response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDF);
					response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDF);
				}
				
			}else{
				System.out.println(mensajeTransaccionMetodo + "IDF: No se pudo guardar el registro en la tabla comun");
				response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDF);
				response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDF);
			}
			
		}catch(BaseException e){
			System.out.println(mensajeTransaccionMetodo +"Error al Insertar en la tabla objeto_comun" + e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDT);
		}
		catch(Exception e){
			System.out.println(mensajeTransaccionMetodo +"Error en el proceso " + e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_NUEVO_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_NUEVO_MSJ_IDT);
		}
		System.out.println(mensajeTransaccionMetodo + "Datos Salida : " + ObjetoXmlUtil.anyObjectToXmlText(response));
		return response;
	}

}
